package com.bjsxt.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bjsxt.constants.Constants;
import com.bjsxt.dto.DictDataDto;
import com.bjsxt.vo.DataGridView;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bjsxt.mapper.DictDataMapper;
import com.bjsxt.domain.DictData;
import com.bjsxt.service.DictDataService;
import org.w3c.dom.stylesheets.LinkStyle;

@Service
public class DictDataServiceImpl implements DictDataService{

    @Autowired
    private DictDataMapper dictDataMapper;

    @Autowired
    private StringRedisTemplate redisTemplate;
    /**
     * 分页查询字典数据
     * @param dictDataDto
     * @return
     */
    @Override
    public DataGridView listPage(DictDataDto dictDataDto) {
        // 条件构造器
        QueryWrapper<DictData> qw = new QueryWrapper<>();
        // 根据类型查询
        qw.eq(StringUtils.isNotBlank(dictDataDto.getDictType()),DictData.COL_DICT_TYPE,dictDataDto.getDictType());
        // 根据字典标签模糊查询
        qw.like(StringUtils.isNotBlank(dictDataDto.getDictLabel()),DictData.COL_DICT_LABEL,dictDataDto.getDictLabel());
        // 根据状态进行查询
        qw.eq(StringUtils.isNotBlank(dictDataDto.getStatus()),DictData.COL_STATUS,dictDataDto.getStatus());
        Page<DictData> page = new Page<>(dictDataDto.getPageNum(),dictDataDto.getPageSize());
         dictDataMapper.selectPage(page,qw);
        return new DataGridView(page.getTotal(),page.getRecords());
    }

    /**
     * 增加
     * @param dictDataDto
     * @return
     */
    @Override
    public int insert(DictDataDto dictDataDto) {
        DictData dictData = new DictData();
        BeanUtil.copyProperties(dictDataDto,dictData);
        dictData.setCreateBy(dictDataDto.getSimpleUser().getUserName());
        dictData.setCreateTime(DateUtil.date());
        return dictDataMapper.insert(dictData);
    }

    /**
     * 修改
     * @param dictDataDto
     * @return
     */
    @Override
    public int update(DictDataDto dictDataDto) {
        DictData dictData = new DictData();
        BeanUtil.copyProperties(dictDataDto,dictData);
        dictData.setUpdateBy(dictDataDto.getSimpleUser().getUserName());
        return dictDataMapper.updateById(dictData);
    }

    /**
     * 删除
     * @param dictCodeIds
     * @return
     */
    @Override
    public int deleteDictDataByIds(Long[] dictCodeIds) {
        List<Long> ids = Arrays.asList(dictCodeIds);
        if (null!=ids&&ids.size()>0){
            return dictDataMapper.deleteBatchIds(ids);
        }
        return -1;
    }

    /**
     * 根据字典类型 查询字典数据
     *之前是直接从数据库中查询
     * 现在我们集成了redis
     * 我们可以直接从redis中取出数据
     * @param dictType
     * @return
     */
    @Override
    public List<DictData> selectDictDataByDictType(String dictType) {
        String key = Constants.DICT_REDIS_PROFIX+dictType;
        ValueOperations<String, String> opsForValue = redisTemplate.opsForValue();
        String s = opsForValue.get(key);
        List<DictData> dictDatas = JSON.parseArray(s, DictData.class);
        return dictDatas;
    }

    /**
     * 根据字典数据编码查询字典数据
     * @param dictCode
     * @return
     */
    @Override
    public DictData selectDictDataById(Long dictCode) {
        return dictDataMapper.selectById(dictCode);
    }
}
